home *** CD-ROM | disk | FTP | other *** search
/ Computer Life 1996 January / Computer Life January 1996.iso / telix / tfw.5 / WINHOST.SLT < prev   
Text File  |  1995-07-28  |  52KB  |  1,856 lines

  1. //
  2. //   W I N H O S T . S L T
  3. //
  4. //   Copyright (C) 1988-1995 deltaComm Development.
  5. //
  6. //   - Written by Colin Sampaleanu.
  7. //   - Modifications by Jeff Woods, Feb '91, to add help function and support
  8. //     for locked modems.
  9. //   - Modifications by Dan Horn, Nov '92, fixed 'floating' timer bug.
  10. //   - Thanks to Jon Fleming for his help in porting this to Windows.
  11. //   - Modifications for hot keys and logins, fixes for chat mode and
  12. //     <=9600 baud remote dos shells in Dec '94 by Sean Palmer
  13. //   - Modifications to Connect baud parsing Jan '95 by Sean Palmer
  14. //   - Modifications to allow ANSI and RIP displays Feb '95 by Jeff Smith
  15. //   - Message system added March '95 by Jeff Smith
  16. //
  17. //   This is a Host Mode for Telix, written as a script file.
  18. //   To configure Host Mode parameters such as passwords, run the 'WCONFIG'
  19. //   script. That script is run automatically if the Host Mode configuration
  20. //   file 'WINHOST.CNF' is missing.
  21. //
  22. //   This script will only work with Hayes compatible modems, but may be
  23. //   modified for operation with other modems.
  24. //
  25. //////////////////////////////////////////////////////////////////////////////
  26.  
  27. #stack 1536  // Increased stack size
  28.  
  29. // Parameters which are configured from the WinHost configuration file
  30.  
  31. str host_downloads[64],         // Default where users may download from
  32.     host_uploads[64],           // Default where uploaded files go
  33.     host_message[64];           // Default used by message system
  34.  
  35. int direct_connect = 0,         // 0 = using a modem
  36.     modem_lock = 0,
  37.     closed_sys = 0;             // 0 = users may sign up on line if not
  38.                                 //  found in the config file
  39.  
  40. // Various global variables
  41.  
  42. str current_caller[31],         // storage of current caller's name
  43.     our_dir[64];                // Winhost directory (either Telix's
  44.                                 //  scripts directory or the contents
  45.                                 //  of the HOST2DIR environment variable
  46.                                 //  if it exists)
  47.  
  48.  
  49. int finished_caller,            // set to TRUE when must return to top
  50.     local_mode,                 // set to TRUE when local test mode
  51.     access_level,               // access level of current caller
  52.     carrier_counts = 1,         // TRUE if should watch Carrier signal
  53.     already_connected = 0,
  54.     exit_requested = 0,         // set to TRUE if Sysop has pressed Esc
  55.     connection_lost = 0,        // set to TRUE when carrier lost
  56.     kill_user = 0,              // set to TRUE when user must be purged
  57.     min_user_name = 5,          // Minimum length of user's name
  58.     user_has_own_dir;           // Flag to restrict the user to one dir
  59.  
  60. int old_scr_chk_key,            // storage for some system variables
  61.     old_cisb_auto,              // which we have to modify and put
  62.     old_zmod_auto,              // back to what they were when done
  63.     old_sound,
  64.     RIP_On, ANSI_On;            // Flag ANSI and RIP capability
  65.  
  66. str old_down_dir[64],
  67.     old_up_dir[64],
  68.     tfw_down_dir[64],
  69.     tfw_up_dir[64],
  70.     old_usage_fname[64];
  71.  
  72. int ndx_fil, mssg_num,          // Message system variables
  73.     mssg_time, mssg_priv;       // used by the index file
  74. str mssg_to[30], mssg_from[30], // "message.ndx"
  75.     mssg_subj[30];
  76.  
  77. #INCLUDE "WHUTILS.SLT"          // Functions which are shared with the
  78.                                 //  configuration managements script
  79.  
  80. //////////////////////////////////////////////////////////////////////////////
  81. //////////////////////////////////////////////////////////////////////////////
  82.  
  83. main() {
  84.  
  85.   int c;
  86.   str s[80], filnam[64];
  87.  
  88.   tfw_up_dir = _up_dir;
  89.   tfw_down_dir = _down_dir;
  90.   clear_scr;
  91.  
  92.   get_our_dir;
  93.  
  94.   if (read_host_config_file == -1) {
  95.      prints("Unable to read WINHOST.CNF...");
  96.      prints("Running WCONFIG, the Host Mode configuration script.^M^J");
  97.      s = our_dir;
  98.      strcat (s, "WCONFIG");
  99.      calld(s);
  100.      if (read_host_config_file() == -1) {
  101.         prints("Still unable to read WINHOST.CNF. Aborting Host Mode.^M^J");
  102.         return -1;
  103.      }
  104.   }
  105.  
  106.   prints ("Checking existence of directories ...");
  107.   if (!(check_directory(host_downloads)
  108.      && check_directory(host_uploads)
  109.      && check_directory(host_message))) {
  110.     prints("Aborting Host Mode.");
  111.     return -1;
  112.   }
  113.  
  114.   old_scr_chk_key = _scr_chk_key;
  115.   _scr_chk_key = 0;
  116.   old_cisb_auto = _cisb_auto;
  117.   _cisb_auto = 0;
  118.   old_zmod_auto = _zmod_auto;
  119.   _zmod_auto = 0;
  120.   old_sound = _sound_on;
  121.   _sound_on = 0;
  122.   old_down_dir = _down_dir;
  123.   old_usage_fname = _usage_fname;
  124.  
  125.   s = our_dir;
  126.   strcat (s, "HOST2.LOG");
  127.   usagelog (s);
  128.  
  129.   carrier_counts = !direct_connect;
  130.   already_connected = (carrier_counts && carrier());
  131.  
  132.   filnam=host_message;
  133.   strcat(filnam, "message.ndx");
  134.   if (filefind(filnam, 0))   {
  135.    ndx_fil=fopen(filnam, "r+");
  136.    if (ndx_fil)
  137.      update_ndx_file();   // scan index file for msgs more than
  138.                           // a certain age, & delete them
  139.   }
  140.   else   {     // Create the index file
  141.    ndx_fil=fopen(filnam, "w+");
  142.    mssg_from="Internal";
  143.    mssg_to="Internal";
  144.    mssg_priv=1;
  145.    mssg_time=curtime();
  146.    mssg_subj="Time Index";
  147.    ndx_write(0);
  148.   }
  149.  
  150.  
  151.   while (1) {
  152.     _down_dir = host_uploads;   // these are reversed because we are the Host
  153.     old_up_dir = _up_dir;
  154.     _up_dir = host_downloads;   // these are reversed because we are the Host
  155.     user_has_own_dir = 0;
  156.     if (!direct_connect && !already_connected) {
  157.       if (!modem_lock)
  158.         set_cparams(modem_lock, 0, 8, 1);
  159.       delay_scr(3);
  160.       prints("Sending Modem Init string...");
  161.       cputs_tr(_mdm_init_str);
  162.       delay_scr(20);
  163.       prints("Sending Auto-Answer string...");
  164.       cputs_tr(_auto_ans_str);
  165.       delay_scr(10);
  166.     }
  167.  
  168.     finished_caller = kill_user = 0;
  169.  
  170.     if (direct_connect)
  171.       carrier_counts = 0;
  172.     else {
  173.       carrier_counts = 1;
  174.       local_mode = 0;
  175.       prints("^M^JHost Mode: Waiting for call...");
  176.       prints("(Press Esc to exit, or 'L' for local test mode).^M^J");
  177.  
  178.       do {
  179.         if (carrier()) break;
  180.  
  181.         if ((c = inkey())==27) {
  182.           exit_requested = 1;
  183.           break;
  184.         }
  185.         else if (c==' ') { cputs("ata^m"); c=0; }
  186.         else if (toupper(c) == 'L') {             // local test mode
  187.           prints("Local test mode entered");
  188.           local_mode = 1;
  189.           carrier_counts = 0;
  190.           break;
  191.         }
  192.       } while (1);
  193.     }
  194.  
  195.     if (!exit_requested) {
  196.       prints("Incoming call. Sysop: press Esc to exit, or END to terminate user.");
  197.  
  198.       do_one_caller();
  199.       if ((connection_lost || kill_user) && carrier_counts && carrier())
  200.         hangup();             // make sure nobody sneaks in
  201.     }
  202.     already_connected = 0;
  203.     if (exit_requested) {
  204.       if (!carrier() && !direct_connect) {
  205.         prints("Sending Modem Init string...");
  206.         cputs_tr(_mdm_init_str);
  207.       }
  208.       _scr_chk_key = old_scr_chk_key;
  209.       _cisb_auto = old_cisb_auto;
  210.       _zmod_auto = old_zmod_auto;
  211.       _sound_on = old_sound;
  212.       _down_dir = tfw_down_dir;
  213.       _up_dir = tfw_up_dir;
  214.       prints("^M^JHost mode script finished.");
  215.       usagelog("*CLOSE*");
  216.       _usage_fname = old_usage_fname;
  217.       return 1;
  218.     }
  219.   }
  220. }
  221.  
  222. //////////////////////////////////////////////////////////////////////////////
  223.  
  224. host_help (str mode, str option) {
  225.  
  226.   str fname[64];
  227.  
  228.   fname = our_dir;
  229.   strcat (fname, mode);
  230.   strcat (fname, "_HELP_");
  231.   StrCat (fname, option);
  232.   StrCat (fname, ".TXT");
  233.  
  234.   if (FileFind (fname, 0)) {
  235.     type_our_file (fname);
  236.     return (1);
  237.   }
  238.   else {
  239.     printsc ("^MCan't find help file ");
  240.     prints (fname);
  241.     return (0);
  242.   }
  243. }
  244.  
  245. //////////////////////////////////////////////////////////////////////////////
  246.  
  247. do_one_caller() {
  248.  
  249.   str strn[80], fname[64],  s[80], temporary[1],
  250.       num[10], CHKSTR[20];
  251.   int option, status, c, i, i2, f, len, TIMR;
  252.  
  253.   access_level = 1;
  254.  
  255. //  flushbuf();
  256.  
  257.   if (already_connected)
  258.     prints("Already conn